package principale.presentation.gui.interfacciaGraficaPura;

import java.awt.Color;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SpringLayout;

import principale.main.Main;
import principale.presentation.gui.operazioniLogiche.AscoltatoreTesto;
import principale.presentation.gui.operazioniLogiche.ConfermaCancellaAscoltatore;
import principale.utility.SpringUtilities;

public class ModuloGUI {
	private static JPanel p;
	private static JFrame frameForm;
	private String[] datiPersona;
	int buttonID;

	public ModuloGUI(String[] datiPersona, int buttonID) {
		this.datiPersona=datiPersona;
		this.buttonID=buttonID;
	}

	public void creaPannello() {
		String[] etichette = {"Nome: ", "Cognome: ", "Indirizzo: ", "Telefono: "};
		p = new JPanel(new SpringLayout());
		//Create and populate the panel.
		for (int i = 0; i < etichette.length; i++) {
			JLabel l = new JLabel(etichette[i], JLabel.TRAILING);
			p.add(l);
			JTextField casellaDiTesto = new JTextField(20);
			casellaDiTesto.setText(datiPersona[i]);
			l.setLabelFor(casellaDiTesto);
			casellaDiTesto.getDocument().addDocumentListener(new AscoltatoreTesto(i,datiPersona));
			p.add(casellaDiTesto);
		}
		JButton confermaButton=creaButton("Conferma",new ConfermaCancellaAscoltatore(0, datiPersona, buttonID));
		JButton cancellaButton=creaButton("Cancella",new ConfermaCancellaAscoltatore(1, datiPersona, buttonID));
		p.add(confermaButton);
		p.add(cancellaButton);
		//Lay out the panel.
		SpringUtilities.makeCompactGrid(p,
				5, 2, //rows, cols
				4, 4,        //initX, initY
				4, 4);       //xPad, yPad
		p.setOpaque(true);  //content panes must be opaque
	}

	public JButton creaButton(String buttonString, ActionListener ascoltatore) {
		JButton button= new JButton(buttonString);
		button.setActionCommand(buttonString);
		button.addActionListener(ascoltatore);

		return button;
	}
	
	public static void setError(int id, String errore) {
		switch(id) {
		case 0: ((JLabel) p.getComponent(2)).setText(errore); break;
		case 1: ((JLabel) p.getComponent(5)).setText(errore); break;
		case 2: ((JLabel) p.getComponent(8)).setText(errore); break;
		case 3: ((JLabel) p.getComponent(11)).setText(errore); break;
		}
		frameForm.setContentPane(p);
		frameForm.pack();
	}
	
	public void mostraGUI(String titolo) {
		if (frameForm!=null) {
			chiudiGUI();
		}
		frameForm = new JFrame(titolo);
		frameForm.setContentPane(p);
		frameForm.pack();
		Main.centralizzaFinestra(frameForm);
		frameForm.setVisible(true);
	}

	public void apriFinestra(String titolo) {
		creaPannello();
		mostraGUI(titolo);
	}

	public static void chiudiGUI() {
		frameForm.dispose();
	}
	
	public static JFrame getFrame() {
		return frameForm;
	}
}
